#ifndef MINIHANDLER_H
#define MINIHANDLER_H

#include "MiniObject.h"
#include <QOpenGLFunctions_3_3_Core>
#include <QVector3D>
#include <QVector4D>
#include <QMatrix4x4>
#include <QPointF>
#include <QList>

using namespace XYF;

/**
 * @file: MiniHandler.h
 * @author: xingyifan
 * @date: 2023-03-17 21:13
 *
 * @description: 用于管理 MiniObject
 */

class MiniHandler
{
public:
    MiniHandler(MiniObject *obj);
    virtual ~MiniHandler();

    // 禁用拷贝和赋值
    MiniHandler(const MiniHandler&) = delete;
    void operator=(const MiniHandler&) = delete;

    // 获得处理器的信息
    int GetObjNum() const;
    float *GetVertices(int i) const;
    unsigned int *GetIndices(int i) const;
    int GetVerticesCount(int i) const;
    int GetIndicesCount(int i) const;
    int GetMode(int i) const;
    int GetLineWidth(int i) const;
    QVector3D GetColor(int i) const;
    QVector3D GetBasisColor() const;

    // 设置信息
    void SetColor(QVector3D color);
    void SetBasisColor(QVector3D color);

    virtual float CheckCollision(QPointF pos, QMatrix4x4 projection) = 0;   // 检查鼠标碰撞
    virtual void ChangeVertex(Vector3f dv) = 0;                             // 移动顶点

protected:
    virtual void UpdateHandler() = 0;   // 刷新顶点数组和索引数组
    void InitHandler();                 // 初始化数据

protected:
    MiniObject *m_object;           // 管理的图元
    Vector3f *m_vertex;             // 可移动的顶点
    QVector3D m_basisColor;         // 基础颜色
    QList<int> m_modes;             // 绘图模式
    QList<int> m_countVertices;     // 记录顶点数组的规模
    QList<int> m_countIndices;      // 记录索引数组的规模
    QList<float*> m_vertices;       // 顶点数组管理
    QList<unsigned int*> m_indices; // 索引数组管理
    QList<QVector3D> m_color;       // 图元颜色
    QList<int> m_lineWidth;         // 设置绘制宽度
};

#endif // MINIHANDLER_H
